<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;

class VariantAttributeValue extends Model
{
    use HasFactory;

    protected $fillable = [
        'variant_id',
        'attribute_id',
        'value',
        'display_value',
        'color_code',
        'sort_order',
        'meta_data',
    ];

    protected $casts = [
        'sort_order' => 'integer',
        'meta_data' => 'array',
    ];

    /**
     * 关联产品变体
     */
    public function variant(): BelongsTo
    {
        return $this->belongsTo(ProductVariant::class, 'variant_id');
    }

    /**
     * 关联规格属性
     */
    public function attribute(): BelongsTo
    {
        return $this->belongsTo(VariantAttribute::class, 'attribute_id');
    }

    /**
     * 获取显示值（优先使用display_value，否则使用value）
     */
    public function getDisplayValueAttribute($value): string
    {
        return $value ?: $this->value;
    }

    /**
     * 作用域：按属性筛选
     */
    public function scopeOfAttribute($query, int $attributeId)
    {
        return $query->where('attribute_id', $attributeId);
    }

    /**
     * 作用域：按变体筛选
     */
    public function scopeOfVariant($query, int $variantId)
    {
        return $query->where('variant_id', $variantId);
    }

    /**
     * 作用域：按排序
     */
    public function scopeOrdered($query)
    {
        return $query->orderBy('sort_order', 'desc')->orderBy('created_at', 'desc');
    }
}